package Demo43;

import java.util.HashMap;
/*
    数青蛙
    https://leetcode.cn/problems/minimum-number-of-frogs-croaking/submissions/537018333/
    我们这里的思路是, 将青蛙叫放入到hashMap当中,可以快速获取到下标
    用一个数组模拟hash表
    有两种情况
        情况一: 当前第一个字符的时候
            如果 有完整的蛙叫,就先--
                    然后第一个字符再++
        情况而: 不是一个个字符
                就判断当前字符的前驱是否是0,如果是0,就直接返回-1
                不是0,就前驱 hash-- 然后当前字符++
        最后变量结束, 就判断hash表当中, 是否有不完整的蛙叫,如果有直接返回-1
        否则返回hash最后一个元素的值
 */
class Solution {
    public int minNumberOfFrogs(String ss) {
        HashMap<Character,Integer> hashStr = new HashMap<>();
        hashStr.put('c',0);
        hashStr.put('r',1);
        hashStr.put('o',2);
        hashStr.put('a',3);
        hashStr.put('k',4);
        char[] s = ss.toCharArray();
        int len = s.length;
        int[] hash = new int[5];
        for(int i = 0; i < len;i++) {
            if(s[i] == 'c') {
                if(hash[4] != 0) {
                    hash[4]--;
                }

                hash[0]++;
            }else {
                int index = hashStr.get(s[i]);// 拿到下标
                if(hash[index - 1] == 0) {
                    // 不是一个完整的青蛙叫,直接返回负一
                    return -1;
                }
                hash[index -1]--;
                hash[index]++;
            }
        }
        for(int i = 0; i < 4;i++) {
            if(hash[i] != 0) {
                return -1;
            }
        }
        return hash[4];
    }
}
class Demo {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int ret = solution.minNumberOfFrogs("aoocrrackk");
        System.out.println(ret);
    }
}